<?php

namespace App\Controller;

use Cake\Event\Event;
use Cake\ORM\TableRegistry;

class UsersController extends AppController {

    public $components = ['Url', 'Flash', 'Email'];

    public function beforeFilter(Event $event) {
        parent::beforeFilter($event);
        $this->Auth->allow(['reiniciarSenha', 'logout']);
    }

    public function novo() {
        if ($this->request->is('post')) {
            $usuarios = TableRegistry::get('Users');
            $user = $usuarios->newEntity($this->request->data);
            $user->set('abert_emissora_id', null);

            $result = $usuarios->save($user);
            if ($result) {
                $this->Flash->success('Cadastro realizado com sucesso');
                return $this->redirect(['controller' => 'aprovacoes']);
            }
            $errors = $user->errors();
        } else {
            $usuarios = TableRegistry::get('Users');
            $user = $usuarios->newEntity();
            $errors = array();
        }

        $this->set(compact('errors', 'user'));
    }

    public function login() {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                if ($user['role'] == 'cliente') {
                    return $this->redirect(['controller' => 'cadastro', 'action' => 'complementar']);
                } else if ($user['role'] == 'publicador') {
                    return $this->redirect(['controller' => 'aprovacoes', 'action' => 'aguardando']);
                }
                return $this->redirect(['controller' => 'aprovacoes']);
            } else {
                $this->Flash->auth(__('Usuário ou senha incorretos'), ['key' => 'auth']);
            }
        }
    }

    public function logout() {
        return $this->redirect($this->Auth->logout());
    }

    public function reiniciarSenha() {
        $errors = array();
        if ($this->request->is('post')) {
            if (!isset($this->request->data['username'])) {
                $errors['username'] = ["Usuário deve ser informado"];
                $this->set(compact('errors'));
                return;
            }
            $usuarios = TableRegistry::get('Users');
            $login = $this->request->data['username'];
            $user = $usuarios->find('all', [ 'conditions' => ['username' => $login],])->first();

            if (!$user) {
                $errors['username'] = ["Usuário não encontrado"];
                $this->set(compact('errors'));
                return;
            }

            $emissoras = TableRegistry::get('Emissoras');
            $emissora = $emissoras->find('all', [ 'conditions' => ['id' => $user['abert_emissora_id']]])->first();
            if (!$emissora) {
                $errors['username'] = ["Usuário não associado a emissora"];
                $this->set(compact('errors'));
                return;
            }

            $newUser = $user->resetarSenha();
            $assunto = 'Projeto Mobilize-se. Senha reiniciada';
            $this->Email->sendEmail(['user' => $newUser, 'emissora' => $emissora], 'reset', $assunto);
            $this->Flash->success('Nova senha enviada ao email de cadastro');
            return $this->redirect(['controller' => 'home', 'action' => 'index']);
        }

        $this->set(compact('errors'));
    }

}
